/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package session;

import java.util.Collection;
import javax.ejb.Stateless;
import javax.ejb.LocalBean;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import entities.Utilisateur;

/**
 *
 * @author asus
 */
@Stateless
@LocalBean
public class GestionnaireUtilisateurs {

    @PersistenceContext
    private EntityManager em;

    public void creerUtilisateursDeTest() {
        creeUtilisateur("admin", "admin", "bd de l'admin", "admin@admin.com", "admin", "admin");
        creeUtilisateur("John", "Lennon", "bd napoleon 3", "lennon@beattles.com", "lennon", "lennon");
    }

    public Utilisateur creeUtilisateur(String nom, String prenom, String adresse, String mail, String password, String confirmPassword) {
        Utilisateur u = new Utilisateur(nom, prenom, adresse, mail, password, confirmPassword);
        getEm().persist(u);
        return u;
    }

    public Collection<Utilisateur> getAllUsers() {
        // Exécution d'une requête équivalente à un select *
        Query q = getEm().createQuery("select u from Utilisateur u");
        return q.getResultList();
    }

    // update to pagination
    public Collection<Utilisateur> getAllUsersPagination(int firstResult) {
        // Exécution d'une requête équivalente à un select *
        Query q = em.createQuery("select u from Utilisateur u");
        q.setFirstResult(firstResult);
        q.setMaxResults(10);
        return q.getResultList();
    }

    public Utilisateur getUserByMail(String mail) {
        Utilisateur u = null;
        // requete
        Query q = getEm().createQuery("select u from Utilisateur u where u.mail='" + mail + "'");
        try {
            u = (Utilisateur) q.getSingleResult();
        } catch (NoResultException e) {
            System.out.println("Pas de user avec ce mail : " + mail);
        }
        return u;
    }

    public void updateUser(Utilisateur u) {
        // requete
        getEm().merge(u);
    }

    public Utilisateur supprimerUtilisateur(String mail) {
        Utilisateur u = getUserByMail(mail);
        if (u != null) {
            em.remove(u);
        }
        return u;
    }

    /**
     * @return the em
     */
    public EntityManager getEm() {
        return em;
    }

    /**
     * @param em the em to set
     */
    public void setEm(EntityManager em) {
        this.em = em;
    }
    
     public void update(Utilisateur u){
        em.merge(u);
    }
    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")
}
